package com.lab.vo;

import lombok.Data;
import java.time.LocalDateTime;

/**
 * 请假申请VO（视图对象）
 * 用于向前端返回请假申请的完整信息，整合申请人信息、审批人信息及申请详情，便于前端展示和审批操作
 */
@Data
public class LeaveRequestVO {

    /**
     * 请假申请ID
     * 对应实体类id字段，用于前端标识单条请假记录（如审批、查看详情操作）
     */
    private Integer id;

    /**
     * 申请人ID（成员ID）
     * 对应实体类memberId字段，用于前端关联申请人信息（如跳转成员详情）
     */
    private Integer memberId;

    /**
     * 申请人姓名（冗余字段）
     * 来源于member表的name字段，直接展示申请人姓名，无需前端二次查询
     */
    private String memberName;

    /**
     * 请假理由
     * 对应实体类reason字段，展示申请人填写的请假原因详情
     */
    private String reason;

    /**
     * 请假开始时间
     * 对应实体类startTime字段，展示请假的起始时间点
     */
    private LocalDateTime startTime;

    /**
     * 请假结束时间
     * 对应实体类endTime字段，展示请假的结束时间点，与开始时间共同体现请假时长
     */
    private LocalDateTime endTime;

    /**
     * 审批状态
     * 对应实体类status字段，展示申请的当前状态（pending/approved/rejected），前端可据此显示不同样式（如待审批标红）
     */
    private String status;

    /**
     * 审批人用户名（冗余字段）
     * 来源于user表的username字段，展示审批人的用户名（若已审批），替代实体类中的approveBy（ID无展示意义）
     */
    private String approveByUsername;

    /**
     * 审批时间
     * 对应实体类approveTime字段，展示审批操作的时间（仅当状态为approved或rejected时有效）
     */
    private LocalDateTime approveTime;

    /**
     * 周标识
     * 对应实体类weekIdentifier字段，格式YYYY-WW，用于前端展示该请假所属的周（辅助体现每周请假次数限制）
     */
    private String weekIdentifier;

    /**
     * 申请提交时间
     * 对应实体类createTime字段，展示请假申请的提交时间，用于排序或筛选最新申请
     */
    private LocalDateTime createTime;
}